# def cascade(n):
#     if n<10:
#         print(n)
#     else:
#         print(n)
#         cascade(n//10)
#         print(n)


#简化版本的cascade函数
def cascade(n):
    print(n)
    if n>=10 :
        cascade(n//10)
        print(n)


#inverse cascade
def inverse_cascade(n):
    grow(n)
    print(n)
    shrink(n)

def f_then_g(f,g,n):
    if n:
        f(n)
        g(n)

# grow=lambda n:f_then_g(grow(n//10),print(n),n)
# shrink=lambda n:f_then_g(print(n),shrink(n//10),n)   
#自己想的，感觉好像把基本知识忘了啊，传入的参数是函数不能给函数参数自带参数，但递归思路是对的
#还有就是要注意n在inverse_cascade函数里print的,grow和shrink里确实不应该传入n

grow=lambda n:f_then_g(grow,print,n//10)
shrink=lambda n:f_then_g(print,shrink,n//10) 

#树递归
#斐波那契数列

#from ucb import trace

def fib(n):
    if n==0:
        return 0
    elif n==1:
        return 1
    else:
        return fib(n-1)+fib(n-2)